home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
redakcyjne
/
programy
/
Tlen 6.0.1.12 pl
/
tleninst60112.exe
/
sdk
/
Plugin_src
/
bar-vc
/
demoplugin.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2006-09-18
|
5KB
|
202 lines
// demoplugin.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include <stdio.h>
#include "../../TlenSources/plugin/plugin_struct.h"
#include "../../TlenSources/plugin/plugin_bar.h"
#include "AggressiveOptimize.h"
#include "resource.h"
HINSTANCE hInst;
TLENPLUGINFUNCTIONS *tlen_functions;
HWND bar_window[3];
HBRUSH hBrush = NULL;
TLENPLUGININFO pluginInfo={
sizeof(TLENPLUGININFO),
"Doklejane okienka - VC++",
PLUGIN_API_VERSION,
MAKE_DWORD_VERSION(1,2,3,4),
"Plugin tworzy trzy okienka, kt≤re zostaj╣ przyklejone do g│≤wnego okna tlenu.",
"⌐ Prawa autorskie",
"Producent",
"E@mail",
"http://www",
0,
0,
0,
0
};
extern "C" __declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD TlenVersion);
extern "C" __declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *tlen_functions);
extern "C" __declspec(dllexport) int UnloadPlugin(void);
int prefDialog(HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam)
{
switch (message) {
case WM_INITDIALOG:
{
if (!hBrush) hBrush=::CreateSolidBrush(RGB(150, 220, 220));
break;
}
case WM_ERASEBKGND:
{
RECT rc;
::GetClientRect(hWnd, &rc);
HDC hdc= (HDC) wparam;
FillRect(hdc,&rc,hBrush);
return 1;
}
case WM_CTLCOLORSTATIC:
{
RECT rc;
HWND hnd = (HWND) lparam;
::GetClientRect(hnd, &rc);
HDC hdc= (HDC) wparam;
SetTextColor(hdc, RGB(0,0,0));
SetBkColor(hdc, RGB(150, 220, 220));
return (int) hBrush;
}
case WM_DESTROY:
{
if (hBrush)
{
DeleteObject(hBrush);
hBrush = NULL;
}
break;
}
//przesuwanie okienka po naci£niΩciu lewego przycisku w client area
case WM_LBUTTONDOWN:
{
ReleaseCapture();
SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
return 1;
}
//po przeniesieniu okienka musimy poinformowaµ tlen o tym zdarzeniu
case WM_EXITSIZEMOVE:
{
BarWindowActionDef pdef;
InitializeStruct(pdef);
pdef.Handle = hWnd;
tlen_functions->CallTlenFunction(hInst, TLEN_MANAGE_BAR_WINDOWS, (WPARAM) TLEN_BAR_WINDOW_ACTION_POSCHANGED, (LPARAM) &pdef);
break;
}
}
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
hInst=hinstDLL;
return TRUE;
}
__declspec(dllexport) TLENPLUGININFO* GetPluginInfo(DWORD tlenVersion)
{
return &pluginInfo;
}
static int CallBackFunc(WPARAM wparam, LPARAM lparam)
{
switch (wparam)
{
//zwracamy lokalizacjΩ doklejonego okienka
case TLEN_BAR_WINDOW_CALLBACK_GETWINRECT:
{
BarWindowActionDef *pos = (BarWindowActionDef *) lparam;
GetWindowRect(pos->Handle, &(pos->WindowRect));
}
break;
//przesuwamy okienko w podane miejsce
case TLEN_BAR_WINDOW_CALLBACK_MOVE:
{
BarWindowActionDef *pos = (BarWindowActionDef *) lparam;
MoveWindow(pos->Handle, pos->WindowRect.left, pos->WindowRect.top, pos->WindowRect.right - pos->WindowRect.left, pos->WindowRect.bottom - pos->WindowRect.top, TRUE);
}
break;
//pokazujemy lub chowamy okienko
case TLEN_BAR_WINDOW_CALLBACK_SHOW:
{
BarWindowActionDef *sdef = (BarWindowActionDef *) lparam;
sdef->Show ? ShowWindow(sdef->Handle, SW_SHOW) : ShowWindow(sdef->Handle, SW_HIDE);
}
break;
}
return 0;
}
__declspec(dllexport) int LoadPlugin(TLENPLUGINFUNCTIONS *functions)
{
tlen_functions = functions;
//pobieramy uchwyt do g│≤wnego okna tlenu
HWND h = (HWND) tlen_functions->CallTlenFunction(hInst, TLEN_MANAGE_BAR_WINDOWS, TLEN_BAR_WINDOW_ACTION_GETMAINHANDLE, NULL);
//tworzymy trzy okna doklejane
for (int i = 0; i < 3; i++)
{
bar_window[i] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1), h, (DLGPROC)prefDialog);
BarWindowAddDef adddef;
InitializeStruct(adddef);
char text[64];
sprintf(text, "Belka nr %d stworzona przez plugin", i + 1);
SetDlgItemText(bar_window[i], IDC_STATIC1, text);
char id[32];
sprintf(id, "barplugin_bar%d", i + 1);
adddef.Handle = bar_window[i];
adddef.CallBackFunction = CallBackFunc;
adddef.BarID = id;
tlen_functions->CallTlenFunction(hInst, TLEN_MANAGE_BAR_WINDOWS, (WPARAM) TLEN_BAR_WINDOW_ACTION_ADD, (LPARAM) &adddef);
}
return 0;
}
__declspec(dllexport) int UnloadPlugin(void)
{
//niszczymy doklejone okna
for (int i = 0; i < 3; i++)
{
if (bar_window[i])
{
tlen_functions->CallTlenFunction(hInst, TLEN_MANAGE_BAR_WINDOWS, (WPARAM) TLEN_BAR_WINDOW_ACTION_REMOVE, (LPARAM) bar_window[i]);
DestroyWindow(bar_window[i]);
}
}
return 0;
}